const _toString = Object.prototype.toString

const Utils = {
  isWeb() {
    const {
      platform
    } = weex.config.env
    return typeof (window) === 'object' && platform.toLowerCase() === 'web'
  },
  isIOS() {
    const {
      platform
    } = weex.config.env
    return platform.toLowerCase() === 'ios'
  },
  /**
   * 是否为 iPhone X
   * @returns {boolean}
   */
  isIPhoneX() {
    const {
      deviceHeight
    } = weex.config.env
    if (this.isWeb()) {
      return typeof window !== 'undefined' && window.screen && window.screen.width && window.screen.height && (parseInt(window.screen.width, 10) === 375) && (parseInt(window.screen.height, 10) === 812)
    }
    return this.isIOS() && deviceHeight === 2436
  },
  isAndroid() {
    const {
      platform
    } = weex.config.env
    return platform.toLowerCase() === 'android'
  },
  isPlainObject(obj) {
    return _toString.call(obj) === '[object Object]'
  },
  makeClassList(classList) {
    // web 支持
    if (this.isWeb() || Array.isArray(classList)) {
      return classList
    } else {
      return Object.keys(classList).filter(classname => classList[classname])
    }
  },
  // fn是我们需要包装的事件回调, interval是时间间隔的阈值
  throttle(fn, interval) {
    // last为上一次触发回调的时间
    let last = 0

    // 将throttle处理结果当作函数返回
    return function () {
      // 保留调用时的this上下文
      let context = this
      // 保留调用时传入的参数
      let args = arguments
      // 记录本次触发回调的时间
      let now = +new Date()

      // 判断上次触发的时间和本次触发的时间差是否小于时间间隔的阈值
      if (now - last >= interval) {
        // 如果时间间隔大于我们设定的时间间隔阈值，则执行回调
        last = now;
        fn.apply(context, args);
      }
    }
  }
}
export default Utils